# @Time : 2020/6/28 14:51
# @Author : Fioman 
# @Phone : 13149920693
"""
元组和多数的python对象一样,保存的是对象的引用.如果引用的元素是可变的,即便元组本身不可变,元素依然可变.
也就是说元组的不可变性其实是指tuple数据结构的物理内容(即保存的引用)不可变,与引用的对象无关.
元组的值会随着引用的可变对象的变化而变化.元组中不可变的是元素的标识.
"""

t1 = (1, 2, [30, 40])
t2 = (1, 2, [30, 40])
print("t1 == t2 : {}".format(t1 == t2))
print("t1 is t2 : {}".format(t1 is t2))
print("id(t1[-1])".format(id(t1[-1])))
t1[-1].append(99)
print("t1 = {}".format(t1))
print("id(t1[-1])".format(id(t1[-1])))

print("t1 == t2 : {}".format(t1 == t2))
print("t1 is t2 : {}".format(t1 is t2))


# 默认是左浅复制
L1 = [3,[55,44],(7,8,9)]
L2 = list(L1)
print("L2 = {}".format(L2))
print("L1 == L2 : {}".format(L1 == L2))
print("L2 is L1 : {}".format(L2 is L1))

# 所有所有的元素都是不可变的,那么浅复制没有问题,还能节省内存.但是,如果有可变的元素,可能就会导致意想不到的问题.
L3 = [3,[66,55,44],(7,8,9)]
L4 = list(L3)
L3.append(100)
L3[1].remove(55)
print("L3 = {}".format(L3))
print("L4 = {}".format(L4))

L4[1] += [33,22]
L4[2] += (10,11)
print("L3 = {}".format(L3))
print("L4 = {}".format(L4))

# 浅拷贝容易操作,但是结果可能并不是你想要的,现在看下如何做深拷贝.




















